#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
"""
@UserFor     :   ***    ***
@File        :   middle-413-等差数列划分.py    
@Email       :   18574945291@163.com
@Modify Time :   2021-02-15 15:12
@Author      :   code_wizard (wll) 
"""

'''
    这道题略微特殊，因为要求是等差数列，可以很自然的想到子数组必定满足 num[i] - num[i-1]
= num[i-1] - num[i-2]。然而由于我们对于 dp 数组的定义通常为以 i 结尾的，满足某些条件的子数
组数量，而等差子数组可以在任意一个位置终结，因此此题在最后需要对 dp 数组求和。
'''

class Solution:
    def numberOfArithmeticSlices(self, A):
        # 1. 按照题目 若数组长度小于3则不符合条件直接返回
        if len(A)<2:
            return 0
        # 2.1 创建一个DP数组
        arr_dp = [0 for i in A]
        for i in range(2,len(A)):
            if A[i]-A[i-1] == A[i-1]-A[i-2]:
                arr_dp[i] = arr_dp[i-1]+1
        return sum(arr_dp)


if __name__ == '__main__':
    A = [1, 2, 3, 4 , 5]
    obj = Solution()
    print(obj.numberOfArithmeticSlices(A))


